package xyz.zyl2020.java8.datetime;

import java.time.LocalDate;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;

/**
 * @author ZhuYinglong
 * @date 2020/11/4 0004
 */
public class LocalDateDemo {

    public static void main(String[] args) {
        // 从默认时区的系统时钟获取当前日期
        LocalDate localDate1 = LocalDate.now();
        // 将此日期输出为 String ，如 2007-12-03 。
        System.out.println("01: " + localDate1);

        // 从一年，一个月和一天获得一个 LocalDate的实例
        LocalDate localDate2 = LocalDate.of(2020, 12, 1);
        System.out.println("02: " + localDate2);

        // 从一年中的第n天获取LocalDate实例
        LocalDate localDate3 = LocalDate.ofYearDay(2020, 45);
        System.out.println("03: " + localDate3);

        // 从一个文本字符串（如 2007-12-03）获取一个 LocalDate的实例，使用默认 DateTimeFormatter.ISO_LOCAL_DATE 格式
        LocalDate localDate4 = LocalDate.parse("2020-12-02");
        System.out.println("04: " + localDate4);
        // 使用特定格式化，从文本字符串获取 LocalDate的实例。
        LocalDate localDate5 = LocalDate.parse("2020/10/03", DateTimeFormatter.ofPattern("yyyy/MM/dd"));
        System.out.println("05: " + localDate5);

        // 获取年
        System.out.println("06: " + localDate5.getYear());
        // 获取月
        System.out.println("07: " + localDate5.getMonthValue());
        // 获取日
        System.out.println("08: " + localDate5.getDayOfMonth());

        // 是否在指定日期之后
        System.out.println("09: " + localDate5.isAfter(localDate4));
        // 是否在指定日期之前
        System.out.println("10: " + localDate5.isBefore(localDate4));
        // 是否与指定日期相等
        System.out.println("11: " + localDate5.isEqual(localDate4));

        // 更改年份，并返回新的实例
        System.out.println("12: " + localDate5.withYear(2019));
        // 更改月份，并返回新的实例
        System.out.println("13: " + localDate5.withMonth(10));
        // 更改日期，并返回新的实例
        System.out.println("14: " + localDate5.withDayOfMonth(9));

        // 年份增加指定值，并返回新的实例
        System.out.println("15: " + localDate5.plusYears(1));
        // 月份增加指定值，并返回新的实例
        System.out.println("16: " + localDate5.plusMonths(1));
        // 日期增加指定值，并返回新的实例
        System.out.println("17: " + localDate5.plusDays(1));

        // 年份减去指定值，并返回新的实例
        System.out.println("18: " + localDate5.minusYears(1));
        // 月份减去指定值，并返回新的实例
        System.out.println("19: " + localDate5.minusMonths(1));
        // 日期减去指定值，并返回新的实例
        System.out.println("20: " + localDate5.minusDays(1));

        // 按照指定格式返回一个字符串
        System.out.println("21: " + localDate5.format(DateTimeFormatter.ofPattern("yyyy/MM/dd")));

        // 添加时间的小时、分钟、秒，获取一个 LocalDateTime 实例
        System.out.println("22: " + localDate5.atTime(10, 11, 12));
        // 添加一个 LocalTime 获取一个 LocalDateTime 实例
        System.out.println("23: " + localDate5.atTime(LocalTime.now()));
    }
}
